package com.tjbklx1.redis.me;

import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class RedisSortedSet {

	/**
	 * 向对应sortedSet里插入指定权重的元素
	 * 
	 * @param sortedSetName
	 * @param elementScore
	 *            元素权重
	 * @param elementname
	 *            元素名
	 * @return
	 */
	public static Long sortedSetAdd(String sortedSetName, double elementScore, String elementname) {
		JedisPool pool = null;
		Jedis jedis = null;
		try {
			pool = RedisConnection.getPool();
			jedis = pool.getResource();
			Long result = jedis.zadd(sortedSetName, elementScore, elementname);
			return result;
		} catch (Exception e) {
			// 释放redis对象
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			// 返还到连接池
			RedisConnection.returnResource(pool, jedis);
		}
		return null;
	}

	/**
	 * 删除指定sortedSet的元素
	 * 
	 * @param sortedSetName
	 * @param elementname
	 *            元素组
	 * @return
	 */
	public static Long sortedSetRemove(String sortedSetName, String... elementname) {
		JedisPool pool = null;
		Jedis jedis = null;
		try {
			pool = RedisConnection.getPool();
			jedis = pool.getResource();
			Long result = jedis.zrem(sortedSetName, elementname);
			return result;
		} catch (Exception e) {
			// 释放redis对象
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			// 返还到连接池
			RedisConnection.returnResource(pool, jedis);
		}
		return null;
	}

	/**
	 * 取得指定sortedSet的全部元素（默认升序）
	 * 
	 * @param sortedSetName
	 * @return
	 */
	public static Set<String> sortedRang(String sortedSetName) {
		JedisPool pool = null;
		Jedis jedis = null;
		try {
			pool = RedisConnection.getPool();
			jedis = pool.getResource();
			Set<String> result = jedis.zrange(sortedSetName, 0, -1);
			return result;
		} catch (Exception e) {
			// 释放redis对象
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			// 返还到连接池
			RedisConnection.returnResource(pool, jedis);
		}
		return null;
	}

	/**
	 * 取得指定sortedSet的全部元素（默认升序）
	 * 
	 * @param sortedSetName
	 * @param start
	 *            其实index
	 * @param end
	 *            终止index
	 * @return
	 */
	public static Set<String> sortedRang(String sortedSetName, Long start, Long end) {
		JedisPool pool = null;
		Jedis jedis = null;
		try {
			pool = RedisConnection.getPool();
			jedis = pool.getResource();
			Set<String> result = jedis.zrange(sortedSetName, start, end);
			return result;
		} catch (Exception e) {
			// 释放redis对象
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			// 返还到连接池
			RedisConnection.returnResource(pool, jedis);
		}
		return null;
	}

	/**
	 * 活动指定sortedSet的某元素的排名 未找到指定元素时返回-1
	 * 
	 * @param sortedSetName
	 * @param elementName
	 * @return
	 */
	public static Long getRang(String sortedSetName, String elementName) {
		JedisPool pool = null;
		Jedis jedis = null;
		try {
			pool = RedisConnection.getPool();
			jedis = pool.getResource();
			Long rank = jedis.zrank(sortedSetName, elementName);
			if (rank == null) {
				return -1L;
			} else {
				return rank;
			}
		} catch (Exception e) {
			// 释放redis对象
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			// 返还到连接池
			RedisConnection.returnResource(pool, jedis);
		}
		return -1L;
	}
}
